package com.ruicar.afs.cloud.manage.creditchange.util;

import cn.hutool.core.io.FileUtil;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Image;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.PdfWriter;
import com.ruicar.afs.cloud.manage.creditchange.vo.PermitPdfInfoVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.pdfbox.multipdf.PDFMergerUtility;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;

/**
 * @author infinity
 * @version 1.0
 * @date 2020/8/29 9:55
 */
@Slf4j
public class PrintToPdfUtil {
    /**
     * @param imageFolderPath 图片文件夹地址
     * @param pdfPath         PDF文件保存地址
     */
    public static void toPdf(String imageFolderPath, String pdfPath) throws IOException, DocumentException {
        FileOutputStream fos = null;
        Document doc = null;
        // 图片文件夹地址
        // 图片地址 imageFolderPath
        String imagePath = null;
        // PDF文件保存地址 pdfPath
        //合并pdf生成的文件名
        String destinationFileName = new Date().getTime() + ".pdf";
        // 输入流
        fos = new FileOutputStream(pdfPath + File.separator + destinationFileName);
        // 创建文档
        doc = new Document(null, 0, 0, 0, 0);
        // 写入PDF文档
        PdfWriter.getInstance(doc, fos);
        // 读取图片流
        BufferedImage img = null;
        // 实例化图片
        Image image = null;
        // 获取图片文件夹对象
        File file = new File(imageFolderPath);
        File[] files = file.listFiles();
        // 循环获取图片文件夹内的图片
        for (File file1 : files) {
            if (file1.getName().endsWith(".png")
                    || file1.getName().endsWith(".jpg")
                    || file1.getName().endsWith(".gif")
                    || file1.getName().endsWith(".jpeg")
                    || file1.getName().endsWith(".tif")) {
                imagePath = imageFolderPath + file1.getName();
                // 读取图片流
                img = ImageIO.read(new File(imagePath));
                // 根据图片大小设置文档大小
                doc.setPageSize(new Rectangle(img.getWidth(), img
                        .getHeight()));
                // 实例化图片
                image = Image.getInstance(imagePath);
                // 添加图片到文档
                doc.open();
                doc.add(image);
            }
        }
        // 关闭文档
        doc.close();
        fos.close();
        FileUtil.del(imageFolderPath);
    }

    /**
     * @param pdfPath  PDF文件原地址
     * @param destPath PDF文件保存地址
     */
    public static PermitPdfInfoVO PDFMerger(String pdfPath, String destPath) throws IOException {
        PermitPdfInfoVO fileinfo = new PermitPdfInfoVO();
        //pdf合并工具类
        PDFMergerUtility mergePdf = new PDFMergerUtility();
        //合并pdf生成的文件名
        String destinationFileName = new Date().getTime() + "_" + "银行" + ".PDF";
        File file = new File(pdfPath);
        File[] files = file.listFiles();
        if (!FileUtil.exist(destPath)) {
            File file2 = new File(destPath);
            file2.mkdirs();
        }
        // 循环获取文件夹内的pdf
        for (File file1 : files) {
            if (file1.getName().endsWith(".PDF") || file1.getName().endsWith(".pdf")) {
                mergePdf.addSource(pdfPath + File.separator + file1.getName());
            }
        }
        //设置合并生成pdf文件名称
        mergePdf.setDestinationFileName(destPath + File.separator + destinationFileName);
        //合并pdf
        mergePdf.mergeDocuments();
//        FileUtil.del(pdfPath);
        fileinfo.setFileName(mergePdf.getDestinationFileName());
        fileinfo.setPath(destPath);
        return fileinfo;
    }
}
